public class Recursos extends Factory {
/**
     * @uml.property  name="colonos"
     */
    private int colonos;
    /**
     * @uml.property  name="dinero"
     */
    private int dinero;
    /**
     * @uml.property  name="PV�"
     */
    private int pv;
    
private static Recursos instancia=null;

    private Recursos() {
        //throw new UnsupportedOperationException("Not yet implemented");
        colonos=75;
        dinero=86;
        pv=100;
    }       
    
    
    //Hago el singleton de Recursos. Jesús
    //Este constructor queda definido para añadir el día de mañana la característica de variar el numero de jugadores que juegan.
    private Recursos(int col,int di, int pvv){
        if(col <=0)
        {
            throw new IllegalArgumentException("Los colonos no pueden ser negativos ni cero");
        }
        if(di <=0)
        {
            throw new IllegalArgumentException("El dinero no pueden ser negativos ni cero");
        }
        if(pvv <=0)
        {
            throw new IllegalArgumentException("Los Pv no pueden ser negativos ni cero");
        }
        this.colonos=col;
        this.dinero=di;
        this.pv=pvv;
    }
    
    public static Recursos getInstancia(){
        
        if (instancia == null)
            {
                instancia = new Recursos();   
            }
       return instancia;
    }
    
    
    public static Recursos getInstancia(int col,int di, int pvv){
        
        if (instancia == null)
            {
                instancia = new Recursos();   
            }
       return instancia;
    }    
    

    /**
     * Getter of the property <tt>colonos</tt>
     * @return  Returns the colonos.
     * @uml.property  name="colonos"
     */
    public int getColonos() {
        return colonos;
    }

    /**
     * Setter of the property <tt>colonos</tt>
     * @param colonos  The colonos to set.
     * @uml.property  name="colonos"
     */
    /*
    public void setColonos(int colonos) { //Este método se saltas las reglas, ya que habilita la posibilidad de modificar colonos a la cantidad que deseemos en cada instante. Según la opinión de Manu y mía (José Antonio) debería de sustituirse este método por uno llamado 'void decrementaColonos(int cantidad)' que modifique la cantidad de colonos SIEMPRE DECREMENTANDO, ya que en el "cajón de colonos" sacaremos siempre colonos hasta que se terminen o termine el juego. Lo dicho con este método es aplicable a 'setDinero' y a 'setPV'.
        this.colonos = colonos;
    }
*/
    public void decrementaColonos(int c) {//el llamar al argumento de entrada igual que al atributo de la clase genera confusión
        
        if(colonos>=0){//En esta rutina, directamente pretendes decrementar el atributo colonos de la clase, pero ¿qué ocurre si se piden más colonos de los que quedan? Esa eventualidad ha de ser solventada. Además, o no entiendo la rutina, o me parece que, en la guarda, preguntas por el argumento equibocado. Aquí preguntas por el argumento de entrada del método, cuando creo que deberías de preguntar por el atributo de la clase.
             colonos = colonos-c;//Esta línea de código está mal, creo que debería de ser así: "this.colonos = this.colonos-colonos"
            }
        
    }    

    public void decrementaDinero(int diner) {//el llamar al argumento de entrada igual que al atributo de la clase genera confusión
        
        if(dinero>=0){//En esta rutina, directamente pretendes decrementar el atributo dinero de la clase, pero ¿qué ocurre si se piden más dineros de los que quedan? Esa eventualidad ha de ser solventada. Además, o no entiendo la rutina, o me parece que, en la guarda, preguntas por el argumento equibocado. Aquí preguntas por el argumento de entrada del método, cuando creo que deberías de preguntar por el atributo de la clase.
            dinero = dinero-diner;
        }
    }
    public void decrementaPV(int Punval) {//el llamar al argumento de entrada igual que al atributo de la clase genera confusión
        if(pv>=0){//En esta rutina, directamente pretendes decrementar el atributo dinero de la clase, pero ¿qué ocurre si se piden más dineros de los que quedan? Esa eventualidad ha de ser solventada. Además, o no entiendo la rutina, o me parece que, en la guarda, preguntas por el argumento equibocado. Aquí preguntas por el argumento de entrada del método, cuando creo que deberías de preguntar por el atributo de la clase.
            pv = pv-Punval;
            }
    }
    /**
     * Getter of the property <tt>dinero</tt>
     * @return  Returns the dinero.
     * @uml.property  name="dinero"
     */
    public int getDinero() {
        return dinero;
    }

    /**
     * Setter of the property <tt>dinero</tt>
     * @param dinero  The dinero to set.
     * @uml.property  name="dinero"
     */
    public void setDinero(int dinero) {
        this.dinero = dinero;
    }

    

    /**
     * Getter of the property <tt>PV�</tt>
     * @return  Returns the v�.
     * @uml.property  name="PV�"
     */
    public int getPV() {
        return pv;
    }

    /**
     * Setter of the property <tt>PV�</tt>
     * @param PV�  The v� to set.
     * @uml.property  name="PV�"
     */
    public void setPV(int pv) {
        this.pv = pv;
    }

}

